#ifndef __CARIOU_LINARD_RAY_HH__
#define __CARIOU_LINARD_RAY_HH__

#include "maths3d.h"

class Ray
{

    protected:

        Point3D  origin;
        Vector3D direction;

    public:

        Ray();
        virtual ~Ray();
        Ray(const Ray &);
        virtual Ray& operator=(const Ray &);

        Ray(const Point3D &, const Vector3D &);
        Ray(const double &, const double &, const double &, const double &, const double &, const double &);

        virtual void    setOrigin(const Point3D &);
        virtual void    setOrigin(const double &, const double &, const double &);
        virtual Point3D getOrigin() const;

        virtual void     setDirection(const Vector3D &);
        virtual void     setDirection(const double &, const double &, const double &);
        virtual Vector3D getDirection() const;

        virtual void setXDir(const double &);
        virtual void setYDir(const double &);
        virtual void setZDir(const double &);

        virtual void incXDir();
        virtual void incYDir();
        virtual void incZDir();

        virtual void normalize();
};

#endif
